package network.messages;

import org.json.*;

/**
 * Classe responsável por construir mensagens passadas entre o servidor e o cliente
 * @author Victor
 */
public class MensagemFactory
{

	public static final String KIND_ATTR = "kind";
	public static final String KIND_ASSIGN_ID = "ASSIGN_ID";
	public static final String KIND_MENSAGEM_TIRO = "MENSAGEM_TIRO";
	public static final String KIND_LOGOUT = "LOGOUT";
	public static final String KIND_ENTER_PLAYER = "ENTER_PLAYER";
	public static final String KIND_UPDATE_POSICAO_PLAYER = "UPDATE_POSICAO_PLAYER";
	public static final String KIND_CHANGE_ESTADO = "CHANGE_ESTADO";

	private MensagemFactory()
	{
	}

	/**
	 * Constroi uma mensagem a partir de uma string
	 * @owner Victor
	 */
	public static Mensagem GetMensagem(String mensagemString)
	{
		Mensagem mensagem = null;

		try
		{
			JSONObject jsonObject = new JSONObject(mensagemString);
			String kind = jsonObject.getString(KIND_ATTR);

			if (kind.equals(KIND_ASSIGN_ID))
			{
				mensagem = new MensagemAssignId();
			} else if (kind.equals(KIND_LOGOUT))
			{
				mensagem = new MensagemLogout();
			} else if (kind.equals(KIND_MENSAGEM_TIRO))
			{
				mensagem = new MensagemTiro();
			} else if (kind.equals(KIND_ENTER_PLAYER))
			{
				mensagem = new MensagemEnterPlayer();
			} else if (kind.equals(KIND_UPDATE_POSICAO_PLAYER))
			{
				mensagem = new MensagemUpdatePosicaoPlayer();
			} else if (kind.equals(KIND_CHANGE_ESTADO))
			{
				mensagem = new MensagemChangeEstado();
			}

			mensagem.Construct(jsonObject);
		} catch (JSONException err)
		{
			err.printStackTrace();
		}

		return mensagem;
	}
}
